package com.bruce.tool.web.filter.convert;

import com.bruce.tool.common.util.DateUtils;
import com.bruce.tool.common.util.regex.RegexUtils;
import com.bruce.tool.common.util.string.StringUtils;
import org.joda.time.DateTime;
import org.springframework.core.convert.converter.Converter;
import org.springframework.lang.Nullable;

import java.util.Date;
import java.util.Objects;

/**
 * 功能 :
 * 日期转换
 * @author : Bruce(刘正航) 23:25 2019-05-14
 */
public class DateConverter implements Converter<String, Date> {
     @Override
     public Date convert(@Nullable String source) {
         if(StringUtils.isBlank(source)){ return null; }
         if( RegexUtils.validDate(source, DateUtils.Parttern.FORMAT_YYMM_MID) ){
             DateTime parse = DateUtils.parse(source, DateUtils.Parttern.FORMAT_YYMM_MID);
             if(Objects.nonNull(parse)){
                 return parse.toDate();
             }
         }
         if( RegexUtils.validDate(source,DateUtils.Parttern.FORMAT_YYMMDD_MID) ){
             DateTime parse = DateUtils.parse(source, DateUtils.Parttern.FORMAT_YYMMDD_MID);
             if(Objects.nonNull(parse)){
                 return parse.toDate();
             }
         }
         if( RegexUtils.validDate(source,DateUtils.Parttern.FORMAT_YYMMDDH_MID) ){
             DateTime parse = DateUtils.parse(source, DateUtils.Parttern.FORMAT_YYMMDDH_MID);
             if(Objects.nonNull(parse)){
                 return parse.toDate();
             }
         }
         if( RegexUtils.validDate(source,DateUtils.Parttern.FORMAT_YYMMDDHM_MID) ){
             DateTime parse = DateUtils.parse(source, DateUtils.Parttern.FORMAT_YYMMDDHM_MID);
             if(Objects.nonNull(parse)){
                 return parse.toDate();
             }
         }
         if( RegexUtils.validDate(source,DateUtils.Parttern.FORMAT_YYMMDDHMS_MID) ){
             DateTime parse = DateUtils.parse(source, DateUtils.Parttern.FORMAT_YYMMDDHMS_MID);
             if(Objects.nonNull(parse)){
                 return parse.toDate();
             }
         }
         if( RegexUtils.validDate(source,DateUtils.Parttern.FORMAT_YYMMDDHMSS_MID) ){
             DateTime parse = DateUtils.parse(source, DateUtils.Parttern.FORMAT_YYMMDDHMSS_MID);
             if(Objects.nonNull(parse)){
                 return parse.toDate();
             }
         }
         if( RegexUtils.validTimeStamp(source) ){
             if( source.length() == 10 ){
                 return DateUtils.create(Integer.parseInt(source)*1000).toDate();
             }
             if( source.length() == 13 ){
                 return DateUtils.create(Integer.parseInt(source)).toDate();
             }
         }
         return null;
     }
 }